// 1、使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
const fp = require('lodash/fp')
const { MayBe, Container } = require('./support')
const { parseInt } = require("lodash")

let maybe = MayBe.of([5,6,1])
let ex1 = (num) =>{
    //补充
    let fn = fp.flowRight(fp.map(fp.add(num)))
    return maybe.map(fn)  
}
console.log(ex1(3))

// 2、实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do','ray','me','fa','so','la','ti','do'])
let ex2 = () => {
    // 补充
    return xs.map(fp.first)._value
}
console.log(ex2()) 

// 3、实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x, o) {
    return MayBe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = () => {
    //补充
    return safeProp('name',user).map(fp.first)._value
}
console.log(ex3())

// 使用MayBe重写ex4，不要有if语句
// let  ex4 = function(n){
//     if(n){
//         return parseInt (n)
//     }
// }
// 重写
let  ex4 = function(n){
    let m1 = new MayBe(n)
    let m2 = m1.map(parseInt)
    return m2._value
}
console.log(ex4());
console.log(ex4(1));
console.log(ex4('3'));
